package com.zendesk.maxwell.schema.columndef;
import com.google.code.or.common.util.MySQLConstants;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKBReader;
import java.util.Arrays;
/**
* Created by ben on 12/30/15.
*/
public class GeometryColumnDef extends ColumnDef {
public GeometryColumnDef(String name, String type, int pos) {
super(name, type, pos);
}
@Override
public boolean matchesMysqlType(int type) {
return type == MySQLConstants.TYPE_GEOMETRY;
}
@Override
public Object asJSON(Object value) {
Geometry geometry = null;
if ( value instanceof Geometry ) {
geometry = (Geometry) value;
} else if ( value instanceof byte[] ) {
byte []bytes = (byte[]) value;
// mysql sprinkles 4 mystery bytes on top of the GIS data.
bytes = Arrays.copyOfRange(bytes, 4, bytes.length);
final WKBReader reader = new WKBReader();
try {
geometry = reader.read(bytes);
} catch ( ParseException e ) {
throw new RuntimeException("Could not parse geometry: " + e);
}
} else {
throw new RuntimeException("Could not parse geometry column value: " + value);
}
return geometry.toText();
}
@Override
public String toSQL(Object value) {
return null;
}
}